package com.itheima.edu.info.manager.controller;

import com.itheima.edu.info.manager.domain.Teacher;
import com.itheima.edu.info.manager.service.TeacherService;
import com.itheima.edu.info.manager.util.AgeUtil;

import java.util.ArrayList;
import java.util.Scanner;

public class TeacherController {
    //创建业务层对象
    private static TeacherService service = new TeacherService();
    //用户录入信息的扫描类
    Scanner sc = new Scanner(System.in);

    //二级菜单主界面-----教师用户管理系统
    public void start() {
        while (true) {
            System.out.println("=========================欢迎您来到老师管理系统==========================");
            System.out.println("请输入您的选择:1.增加老师信息\t2.删除老师信息\t3.修改老师信息.\t4.修改老师信息\t5.退出系统");
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    addTeacher();
                    break;
                case 2:
                    deleteTeacher();
                    break;
                case 3:
                    updateTeacher();
                    break;
                case 4:
                    selectTeacher();
                    break;
                case 5:
                    System.out.println("感谢您的使用,下次再见!");
                    System.exit(0);
                    break;
                default:
                    System.out.println();
                    break;
            }
        }
    }

    //客服:删除老师的信息
    private void deleteTeacher() {
        //获取一个存在的老师id
        String id = InputGetId(true);
        //通过老师对象和业务层增加老师的方法
        boolean res = service.deleteTeacher(id);
        //根据业务层返回的结果,给用户展示提示信息
        if (res) {
            System.out.println("\t\t\t\t\t\t删除成功!");
        } else {
            System.out.println("\t\t\t\t\t\t删除失败!");
        }
    }

    //客服:修改老师信息
    private void updateTeacher() {
        //获取一个存在的老师id
        String id = InputGetId(true);
        //根据id录入老师其他信息并封装成对象
        Teacher tea = byIdGetTeacher(id);
        //通过老师对象和业务层增加老师的方法
        boolean res = service.updateTeacher(tea);
        //根据业务层返回的结果,给用户展示提示信息
        if (res) {
            System.out.println("\t\t\t\t\t\t修改成功!");
        } else {
            System.out.println("\t\t\t\t\t\t修改失败!");
        }
    }

    //客服:查找所有的老师信息
    private void selectTeacher() {
        //通过业务层获取老师信息的集合对象
        ArrayList<Teacher> list = service.selectTeacher();
        //集合为空提示用户输入信息,否则打印集合信息
        if (list != null) {
            System.out.println("老师id\t老师姓名\t老师年龄\t老师生日");
            list.stream().filter(tea -> tea != null).forEach(tea -> System.out.println(tea.show()));
        } else {
            System.out.println("您要查找的信息还没有添加呢,请尽快添加数据...");
        }
    }

    //增加老师信息
    private void addTeacher() {
        //获取一个不存在的老师id
        String id = InputGetId(false);
        //根据id录入老师其他信息并封装成对象
        Teacher tea = byIdGetTeacher(id);
        //通过老师对象和业务层增加老师的方法
        boolean res = service.addTeacher(tea);
        //根据业务层返回的结果,给用户展示提示信息
        if (res) {
            System.out.println("\t\t\t\t\t\t添加成功!");
        } else {
            System.out.println("\t\t\t\t\t\t添加失败!");
        }
    }

    //根据参数要求获得正确老师的id
    private String InputGetId(boolean flag) {
        System.out.println("\t\t\t\t\t\t请输入老师id:");
        //定义变量id
        String id;
        //循环录入id为了获取满足要求的老师id
        while (true) {
            //录入老师id
            id = sc.next();
            //调用业务层方法判断老师id是否存在
            boolean isExists = service.isExists(id);
            //判断结果是否符合要求,是否要跳出循环
            if (flag == isExists) {
                break;
            }
            System.out.println("您输入的id,不符合要求,请您重新输入...");
        }
        return id;
    }

    //录入老师用户的信息
    public Teacher byIdGetTeacher(String id) {
        //录入老师信息
        System.out.println("\t\t\t\t\t\t请输入老师的姓名:");
        String name = sc.next();
        System.out.println("\t\t\t\t\t\t请输入老师生日:");
        String birthday = sc.next();
        //封装老师信息为对象
        return new Teacher(id, name, AgeUtil.getAge(birthday), birthday);
    }

    //控制层的老师登录功能
    public void login() {
        System.out.println("进入老师管理系统请先登录,谢谢!");
        //1.设置允许登录的次数
        for (int i = 1; i <= 3; i++) {
            //录入用户登录的信息
            System.out.println("\t\t\t\t\t\t请输入用户名:");
            String name = sc.next();
            System.out.println("\t\t\t\t\t\t请输入密码:");
            String password = sc.next();
            //调用业务层获取登录结果,并给用户提示信息
            if (service.login(name, password)) {
                System.out.println("\t\t\t\t\t\t恭喜您,登录成功!");
                break;
            } else {
                if (i == 3) {
                    System.out.println("您今天没有登录机会了...");
                } else {
                    System.out.println("您今天还剩" + (3 - i) + "次登录机会");
                }
            }
        }
    }
}
